#ifndef PROXYSERVER_TO_GAME_MODULE_H
#define PROXYSERVER_TO_GAME_MODULE_H

#include <string>
#include "Protocol/Protocol.h"
#include "PluginModule/IProxyServerToGameModule.h"
#include "PluginModule/IProxyServerNetServerModule.h"
#include "PluginModule/IProxyLogicModule.h"
#include "PluginModule/INetModule.h"
#include "PluginModule/ILogModule.h"
#include "PluginModule/INetClientModule.h"
#include "PluginModule/IConfigModule.h"

namespace FragrantGrass
{
	class ProxyServerToGameModule : public IProxyServerToGameModule
	{
	public:

		ProxyServerToGameModule(IPluginManager* p)
		{
			m_pPluginManager = p;
		}

		virtual bool Init();
		virtual bool Shut();
		virtual bool Execute();

		virtual bool AfterInit();

	protected:

		void OnSocketGSEvent(const SOCK nSockIndex, const FG_NET_EVENT eEvent, INet* pNet);

		void Register(INet* pNet);

		void OnAckEnterGame(const SOCK nSockIndex, const int nMsgID, const char* msg, const uint32_t nLen);
		void LogServerInfo(const std::string& strServerInfo);

		void Transpond(const SOCK nSockIndex, const int nMsgID, const char* msg, const uint32_t nLen);

	private:
		ILogModule* m_pLogModule;
		IProxyServerNetServerModule* m_pProxyServerNet_ServerModule;
		INetClientModule* m_pNetClientModule;
		IConfigModule* m_pConfigModule;

	};
}

#endif